﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SalaDeEnsayo.WebApplication.SecurityAttributes;
using SalaDeEnsayo.ApplicationService;
using SalaDeEnsayo.ApplicationService.Model.Entity;
using System.Data;

namespace SalaDeEnsayo.WebApplication
{
    [RolUsuario]
    [RolAdminSistema]
    public partial class GestionInsumos : System.Web.UI.Page
    {
        private static DataTable TableVentas = new DataTable();
        public static int numero;

        public GestionInsumos()
        {
            GenerarDataTable();
           
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            
            if (!IsPostBack)
            {
                CargarDropDownList();
                CargarDropDownListInc();
                BindGrid();
                numero = 0;
                lblDate.Text = DateTime.Now.Date.ToString("dd/MM/yyyy");
                

            }

            lblProd.Visible = false;
            lblCant.Visible = false;
            lblProd2.Visible = false;
            lblCant2.Visible = false;

        }

        protected void GenerarDataTable()
        {


            if (TableVentas.Columns.Count == 0)
            {
                TableVentas.Columns.Add("Nro", typeof(int));
                TableVentas.Columns.Add("id_producto", typeof(long));
                TableVentas.Columns.Add("Producto", typeof(string));
                TableVentas.Columns.Add("Precio", typeof(double));
                TableVentas.Columns.Add("Cantidad", typeof(long));
                TableVentas.Columns.Add("Total", typeof(double));
            }
            else
            { 
                
            }

        }

        
        private void BindGrid()
        {

            grdProductos.DataSource = TableVentas;
            grdProductos.DataBind();
        }
                   
        private void CargarDropDownList()
        {
            ProductoService productoS = new ProductoService();
            ddlProductos.Items.Add(new ListItem("--Seleccione--", "0"));
            List<Producto> producto = productoS.ObtenerTodos();
            ddlProductos.Items.AddRange(producto.Select(p => new ListItem(p.Descripcion, p.Id_Producto.ToString())).ToArray());
        }

        private void CargarDropDownListInc()
        {
            ProductoService productoS = new ProductoService();
            ddlProductos2.Items.Add(new ListItem("--Seleccione--", "0"));
            List<Producto> producto = productoS.ObtenerTodos();
            ddlProductos2.Items.AddRange(producto.Select(p => new ListItem(p.Descripcion, p.Id_Producto.ToString())).ToArray());
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            txtPrecio.Text = "";
            txtStock.Text = "";
            txtCant.Text = "";
            ddlProductos.SelectedIndex = 0;
        }

      
        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            if (ddlProductos.SelectedIndex != 0)
            {
                if (txtCant.Text.Trim() != String.Empty && int.Parse(txtCant.Text.Trim()) != 0)
                {
                    numero = numero + 1;
                    long suma;
                    DataRow Row = TableVentas.NewRow();

                    Row[0] = numero;
                    Row[1] = int.Parse(ddlProductos.SelectedValue.ToString());
                    Row[2] = ddlProductos.SelectedItem.Text;
                    Row[3] = double.Parse(txtPrecio.Text);
                    Row[4] = int.Parse(txtCant.Text);
                    Row[5] = double.Parse(txtPrecio.Text) * int.Parse(txtCant.Text);


                    TableVentas.Rows.Add(Row);

                    lblTotal.Text = this.SumarTotales().ToString();
                    suma = Convert.ToInt64(txtStock.Text) - (long)Row["Cantidad"];
                    txtStock.Text = suma.ToString();

                    BindGrid();

                    btnBorrarTodo.Enabled = true;
                    btnGuardar.Enabled = true;

                    txtPrecio.Text = "";
                    txtStock.Text = "";
                    txtCant.Text = "";
                    ddlProductos.SelectedIndex = 0;

                    pnlIncrementar.Enabled = false;

                }
                else
                {
                    lblCant.Visible = true;
                }
            }
            else 
            {
                lblProd.Visible = true;
            }
            
        }

        protected void ddlProductos_SelectedIndexChanged(object sender, EventArgs e)
        {
            long StockDb;
            long StockTmp;
            if (ddlProductos.SelectedIndex != 0)
            {
                ProductoService pS = new ProductoService();

                txtPrecio.Text = pS.ObtenerPrecio(long.Parse(ddlProductos.SelectedValue.ToString())).ToString();
                StockDb= pS.ObtenerStock(long.Parse(ddlProductos.SelectedValue.ToString()));
                StockTmp = this.ObtenerStockTmp(long.Parse(ddlProductos.SelectedValue.ToString()));

                txtStock.Text = (StockDb - StockTmp).ToString();

                txtCant.Focus();
            }
            else 
            {
                txtCant.Text = "";
                txtPrecio.Text = "";
                txtStock.Text = "";
            }
        }

        protected void ddlProductos2_SelectedIndexChanged(object sender, EventArgs e)
        {
            long StockDb;
            long StockTmp;
            if (ddlProductos2.SelectedIndex != 0)
            {
                ProductoService pS = new ProductoService();

               
                StockDb = pS.ObtenerStock(long.Parse(ddlProductos2.SelectedValue.ToString()));
                StockTmp = this.ObtenerStockTmp(long.Parse(ddlProductos2.SelectedValue.ToString()));

                txtStock2.Text = (StockDb - StockTmp).ToString();
                txtCant2.Focus();
            }
            else
            {
                txtCant.Text = "";
                txtPrecio.Text = "";
                txtStock.Text = "";
            }
        }


        private long ObtenerStockTmp(long id_producto)
        {
            long sum=0;

            foreach (DataRow r in TableVentas.Rows)
            {
                if (id_producto == (long)r["id_producto"])
                {
                    sum = sum + (long)r["Cantidad"];

                }



            }
            return sum;
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {

        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            string[] var = ((ImageButton)sender).CommandArgument.Split(';');


            if(EliminarRegistro(long.Parse(var[0]))==0)
            {
                //Master.ShowMessage("Venta de Producto Eliminada");
            }
            else
            {
                Master.ShowError("No se pudo eliminar el registro, vuelva a intentar");
            }

            this.BindGrid();
           
        }

        private int EliminarRegistro(long nro)
        {
            double suma;
            double  Total;

            foreach (DataRow r in TableVentas.Rows)
            {
                if (nro == (int)r["Nro"])
                {
                    Total = (double)r["Total"];
                    suma = int.Parse(lblTotal.Text);
                    suma = suma - Total;

                    if (suma == 0)
                    {
                        lblTotal.Text = "-";
                    }
                    else
                    {
                        lblTotal.Text = suma.ToString();
                    }
                    

                    r.Delete();
                    return 0;

                }

            }
            return 1;
        }

        protected void grdProducto_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdProductos.PageIndex = e.NewPageIndex;
            BindGrid();

        }


      

        protected void btnBorrarTodo_Click(object sender, EventArgs e)
        {

            TableVentas.Rows.Clear();
            numero = 0;
            this.BindGrid();
            lblTotal.Text = "-";

            pnlIncrementar.Enabled = true;



        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {

            if (TableVentas.Rows.Count != 0)
            {
                this.GuardarVenta();
                this.LimpiarPantalla();


            }
            else 
            {
                Master.ShowError("No se puede guardar.La lista de productos se encuentra vacía");
            }
        }

        private void GuardarVenta() 
        {

            Venta v = new Venta();
            int id;
            VentaService ventaS = new VentaService();

            v.fecha = DateTime.Now;

            try
            {
                id = ventaS.AgregarVenta(v);
                this.GuardarDetallesVenta(id);

                Master.ShowMessage("La venta se agregó correctamente.");
            }
            catch 
            {
                Master.ShowError("Ocurrió un problema inesperado, por favor intente mas tarde.");
            }
        }

        private void GuardarDetallesVenta(int id)
        {
           
            DetalleVentasService dvS= new DetalleVentasService();
            ProductoService prodS = new ProductoService();

            foreach(DataRow r in TableVentas.Rows)
            {
                DetalleVenta dv = new DetalleVenta();

                dv.id_venta = id;
                dv.id_producto = (long)r["id_producto"];
                dv.precio_venta = (double)r["Precio"];
                dv.cantidad = (long)r["Cantidad"];

                prodS.RestarStock(dv.id_producto, dv.cantidad);
                dvS.AgregarDetalleVenta(dv);
                
            }

        }

        private void LimpiarPantalla() 
        {
            TableVentas.Rows.Clear();
            numero = 0;
            BindGrid();

            txtCant.Text = "";
            txtPrecio.Text = "";
            txtStock.Text = "";
            ddlProductos.SelectedIndex = 0;
            lblTotal.Text = "-";

            pnlIncrementar.Enabled = true;
        }


        private double SumarTotales() 
        {
            double total=0;

            foreach (DataRow r in TableVentas.Rows)
            {
                total += (double)r["Total"];

            }

            return total;

        }

        protected void btnAgregarStock_Click(object sender, EventArgs e)
        {
            int a;
            if (ddlProductos2.SelectedIndex != 0)
            {
                if (int.TryParse(txtCant2.Text,out a))
                {
                
                    Producto p = new Producto();
                    ProductoService pS = new ProductoService();


                    p.Id_Producto = int.Parse(ddlProductos2.SelectedValue);
                    p.Cantidad = int.Parse(txtStock2.Text) + int.Parse(txtCant2.Text);

                    if (pS.ModificarProductoStock(p) != 0)
                    {
                        Master.ShowMessage("Se ha incrementado el stock correctamente.");
                        txtCant2.Text = "";
                        txtStock2.Text = "";
                        ddlProductos2.SelectedIndex = 0;
                    }
                    else
                    {
                        Master.ShowError("Ocurrió un problema inesperado, por favor intente mas tarde.");
                    }
                }
                else
                {
                    lblCant2.Visible=true;

                }
            }
            else
            {
                lblProd2.Visible = true;
            }



        }

        protected void btnCancelarInc_Click(object sender, EventArgs e)
        {
            txtCant2.Text = "";
            txtStock2.Text = "";
            ddlProductos2.SelectedIndex = 0;
        }

        protected void grdProductos_SelectedIndexChanged1(object sender, EventArgs e)
        {

        }

        protected void txtCant_TextChanged(object sender, EventArgs e)
        {

        }



       




    }
}
